package reuseplugin.views.eintragsListe;

import java.text.Collator;

import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerSorter;

import common.administration.Benutzer;
import common.itemhandling.Eintrag;
import common.itemhandling.Kategorie;

/**
 * @author Julius Ollesch
 * 
 */
public class EintragsTableSorter extends ViewerSorter {
	private int propertyIndex;
	// private static final int ASCENDING = 0;
	private static final int DESCENDING = 1;

	private int direction = DESCENDING;

	public EintragsTableSorter() {
		this.propertyIndex = 0;
		direction = DESCENDING;
	}

	@Override
	public int compare(Viewer viewer, Object o1, Object o2) {
		Eintrag e1 = (Eintrag) o1;
		Eintrag e2 = (Eintrag) o2;
		int rc = 0;
		switch (propertyIndex) {
		case 0:
			rc = Collator.getInstance().compare(e1.getName(), e2.getName());
			break;
		case 1:
			if (e1.getId() == (e2.getId())) {
				rc = 0;
			} else if (e1.getId() < (e2.getId())) {
				rc = -1;
			} else {
				rc = 1;
			}
			break;
		case 2:
			rc = Collator.getInstance().compare(e1.getBeschreibung(),
					e2.getBeschreibung());
			break;
		case 3:
			/**
			 * Abfrage ob Session aktiv
			 */
			if (reuseplugin.Activator.getDefault().c.isAktiv()) {
				Kategorie tmp1 = reuseplugin.Activator.getDefault().c
						.kategorieAnzeigen(e1.getKategorie());
				Kategorie tmp2 = reuseplugin.Activator.getDefault().c
						.kategorieAnzeigen(e2.getKategorie());
				if (tmp1 != null && tmp2 != null) {
					rc = Collator.getInstance().compare(tmp1.getName(),
							tmp2.getName());
				} else {
					rc = 0;
				}
			}
			break;
		case 4:
			rc = Collator.getInstance().compare(e1.getTags(), e2.getTags());
			break;
		case 5:
			/**
			 * Abfrage ob Session aktiv
			 */
			if (reuseplugin.Activator.getDefault().c.isAktiv()) {
				Benutzer tmp1 = reuseplugin.Activator.getDefault().c
						.benutzerAnzeigen(e1.getErsteller());
				Benutzer tmp2 = reuseplugin.Activator.getDefault().c
						.benutzerAnzeigen(e2.getErsteller());
				if (tmp1 != null && tmp2 != null) {
					rc = Collator.getInstance().compare(tmp1.getBenutzername(),
							tmp2.getBenutzername());
				} else {
					rc = 0;
				}
			}

			break;
		case 6:
			if (e1.getDateien().size() == (e2.getDateien().size())) {
				rc = 0;
			} else if (e1.getDateien().size() < (e2.getDateien().size())) {
				rc = -1;
			} else {
				rc = 1;
			}
			break;
		case 7:
			if (e1.isGesperrt() == e2.isGesperrt()) {
				rc = 1;
			} else {
				rc = -1;
			}
			break;
		default:
			rc = 0;
			break;
		}
		// If descending order, flip the direction
		if (direction == DESCENDING) {
			rc = -rc;
		}
		return rc;
	}

	public void setColumn(int column) {
		if (column == this.propertyIndex) {
			// Same column as last sort; toggle the direction
			direction = 1 - direction;
		} else {
			// New column; do an ascending sort
			this.propertyIndex = column;
			direction = DESCENDING;
		}
	}
}
